/**
 * created by dt at 2025-05-06
 */
export class ArchetypeMaskUtil {
    static combine(typeMasks: bigint[]) {
        return typeMasks.reduce((mask, typeMask) => {
            return mask | typeMask;
        }, 0n);
    }
    static has(src:bigint, mask:bigint) : boolean{
        return (mask & src) !== 0n;
    }

    // 增加
    static add(src:bigint, mask:bigint):bigint {
        return src | mask;
    }

    // 移除
    static erase(src:bigint, mask:bigint):bigint {
        return src & ~mask;
    }

    // 判断子集 , a是否包含b
    static contains(a:bigint, b:bigint) : boolean {
        return (a & b) == b;
    }
}

// export class Archetype {
//     private _mask: bigint;
//     private static _archetypeMap: Map<bigint, Archetype> = new Map();
//     constructor(typeMasks: bigint[]) {
//         this._mask = ComponentMaskUtil.combine(typeMasks);
//     }

//     get mask() {
//         return this._mask;
//     }

//     // 判断类型数组是否为子集
//     isSubsetOf(mask: bigint) {
//         return ComponentMaskUtil.contains(this.mask, mask);
//     }
// }